package com.sunflower.common.core.domain.model;

import com.sunflower.common.core.interceptor.SFunction;
import jakarta.annotation.Nullable;

import java.io.Serializable;

/**
 * 使得普通对象转Tree对象 辅助信息存储接口
 *
 * @author: SunLuQuan
 * @Date: 2024年04月01日 16:18
 * @Description: ToTreeInfo
 */
public interface ToTreeInfo<T> {
    /**
     * 父级属性
     *
     * @return
     */
    SFunction<T, Serializable> parentId();

    /**
     * 子级属性
     *
     * @return
     */
    SFunction<T, Serializable> id();

    /**
     * 树节点名称
     *
     * @return
     */
    default SFunction<T, Serializable> name() {
        return null;
    }

    /**
     * 是否是根节点
     *
     * @param t
     * @return
     */
    boolean condition(T t);

    /**
     * 转换为Tree对象
     *
     * @param t
     * @return
     */
    Tree<T> toTree(@Nullable Tree<T> parent, T t);
}
